#ifndef __MY_DEFINE_H
#define __MY_DEFINE_H

#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include "stdint.h"

/**********************     DEBUG     **********************/
#define MY_DEBUG
#ifdef MY_DEBUG
#define MY_LOG(fmt, arg...)  printf("[%s:%d][I]"fmt"\n",__func__, __LINE__, ##arg)
#else
static __inline void __do_nothing(const char *fmt, ...) { (void)fmt; }
#define MY_LOG(fmt, arg...)  __do_nothing(fmt, ##arg)
#endif

/**********************     TYPEDEF    **********************/
typedef unsigned       	char 	u8;
typedef unsigned short 	int 	u16;
typedef unsigned       	int 	u32;
typedef signed       	char 	s8;
typedef signed short 	int 	s16;
typedef signed       	int 	s32;

/**********************    FUNCTION    **********************/
#define BREAK_UINT32( var, ByteNum ) \
          (u8)((u32)(((var) >>((ByteNum) * 8)) & 0x00FF))

#define BUILD_UINT32(Byte0, Byte1, Byte2, Byte3) \
          ((u32)((u32)((Byte0) & 0x00FF) \
          + ((u32)((Byte1) & 0x00FF) << 8) \
          + ((u32)((Byte2) & 0x00FF) << 16) \
          + ((u32)((Byte3) & 0x00FF) << 24)))

#define BUILD_UINT16(loByte, hiByte) \
          ((u16)(((loByte) & 0x00FF) + (((hiByte) & 0x00FF) << 8)))

#define HI_UINT16(a) (((a) >> 8) & 0xFF)
#define LO_UINT16(a) ((a) & 0xFF)

#define BUILD_UINT8(hiByte, loByte) \
          ((u8)(((loByte) & 0x0F) + (((hiByte) & 0x0F) << 4)))

#define HI_UINT8(a) (((a) >> 4) & 0x0F)
#define LO_UINT8(a) ((a) & 0x0F)

#endif

